package com.weiquan.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.weiquan.dto.AdminLoginRequest;
import com.weiquan.dto.AdminCreateRequest;
import com.weiquan.dto.AdminUpdateRequest;
import com.weiquan.entity.SysAdmin;
import com.weiquan.vo.AdminInfoVO;
import com.weiquan.vo.AdminLoginResponse;

import java.util.List;
import java.util.Map;

/**
 * 系统管理员服务接口
 */
public interface SysAdminService extends IService<SysAdmin> {

    /**
     * 管理员登录
     */
    AdminLoginResponse login(AdminLoginRequest request, String clientIp);

    /**
     * 管理员登出
     */
    boolean logout(String token);

    /**
     * 获取管理员信息
     */
    AdminInfoVO getAdminInfo(Long adminId);

    /**
     * 创建管理员
     */
    boolean createAdmin(AdminCreateRequest request, Long createBy);

    /**
     * 更新管理员信息
     */
    boolean updateAdmin(Long adminId, AdminUpdateRequest request, Long updateBy);

    /**
     * 删除管理员
     */
    boolean deleteAdmin(Long adminId, Long deleteBy);

    /**
     * 批量删除管理员
     */
    boolean batchDeleteAdmin(List<Long> adminIds, Long deleteBy);

    /**
     * 启用/禁用管理员
     */
    boolean updateAdminStatus(Long adminId, Integer status, Long updateBy);

    /**
     * 批量更新管理员状态
     */
    boolean batchUpdateAdminStatus(List<Long> adminIds, Integer status, Long updateBy);

    /**
     * 重置管理员密码
     */
    boolean resetPassword(Long adminId, String newPassword, Long updateBy);

    /**
     * 修改管理员密码
     */
    boolean changePassword(Long adminId, String oldPassword, String newPassword);

    /**
     * 分页查询管理员列表
     */
    Page<AdminInfoVO> getAdminList(int pageNum, int pageSize, String keyword, Integer role, Integer status);

    /**
     * 根据角色查询管理员
     */
    List<AdminInfoVO> getAdminsByRole(Integer role);

    /**
     * 检查用户名是否存在
     */
    boolean checkUsernameExists(String username, Long excludeId);

    /**
     * 检查手机号是否存在
     */
    boolean checkPhoneExists(String phoneNumber, Long excludeId);

    /**
     * 检查邮箱是否存在
     */
    boolean checkEmailExists(String email, Long excludeId);

    /**
     * 获取管理员统计信息
     */
    Map<String, Object> getAdminStatistics();

    /**
     * 获取管理员登录统计
     */
    List<Map<String, Object>> getLoginStatistics(String startDate, String endDate);

    /**
     * 获取最近登录的管理员
     */
    List<AdminInfoVO> getRecentLoginAdmins(int limit);

    /**
     * 验证管理员权限
     */
    boolean hasPermission(Long adminId, String permission);

    /**
     * 更新管理员权限
     */
    boolean updatePermissions(Long adminId, List<String> permissions, Long updateBy);

    /**
     * 获取管理员权限列表
     */
    List<String> getAdminPermissions(Long adminId);

    /**
     * 刷新管理员Token
     */
    String refreshToken(String oldToken);

    /**
     * 验证管理员Token
     */
    SysAdmin validateToken(String token);

    /**
     * 记录管理员操作日志
     */
    void recordOperationLog(Long adminId, String operation, String details, String clientIp);
}